This relates generally to video encoders.
Video encoders are used to take video data and to encode it in a format which takes up less space. As a result, the bandwidth consumed between devices that transmit and receive video information may be used more efficiently or more data can be transmitted between those devices in the same time.
Conventionally, video data used by encoders is formatted in 16×16 blocks called macroblocks. The use of macroblocks is widely applied throughout the video compression field.
As a result, in most conventional operations, 16×16 macroblocks are utilized. For example, a memory may store reference (previously encoded) frames. The currently processed frame is compared to a reference frame to remove redundancies. The encoding process may rely on those reference frames, as well as differences between those reference frames and the currently processed frame. Typically, because video data is stored in 16×16 blocks, the 16×16 block format is used to store the reference frames in the memory used by the video encoder.
However, some memories, such as double data rate three (DDR3) static dynamic random access memories (see DDR3 SDRAM Standard, JESD79-3D, September 2009, available from JEDEC, Arlington, Va. 22201) provide, in response to a request for a macroblock of data, not one, but two, macroblocks. In fact, the fetches from the memory of the reference pictures consume the majority of the bandwidth between the encoder and the memory in typical video encoders.
Thus, every time a 16×16 macroblock from the reference picture is requested by the encoder, the memory may return two side-by-side, 16×16 macroblocks, instead of one 16×16 macroblock. This is because the minimum burst length of 32 bytes is specified in the DDR3 standard. The 32 bytes fetched from the DDR3 memory contains a 16 byte line in the requested macroblock and a 16 byte line in the macroblock to the right. The video encoder only consumes the requested 16×16 macroblock and the macroblock to the right is dropped. This results in the consumption of twice the bandwidth since every request for an individual 16×16 macroblock results in consuming the bandwidth of two macroblocks.